package com.able.concurrency.t1;

import java.util.concurrent.TimeUnit;

/**
 * @author abel.he
 * @data 2018/8/15 19:00
 * @describe synchronized方法只能保证当前方法数据的原子性，不能保证多个业务方法之间相互访问的原子性
 * 注意在商业开发中，多方法要求结果访问原子性，需要多个方法都加锁，且锁定同一个资源
 *
 * 一般来说，商业项目中，不考虑业务逻辑上的脏读问题
 */
public class Test5 {

    private double num = 0;

    public synchronized void m1(double num){
        try {
            //相当于复杂的业务逻辑
            TimeUnit.SECONDS.sleep(2);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        this.num = num;
    }

    public double getNum() {
        return this.num;
    }

    public static void main(String[] args) {
        final Test5 test5 = new Test5();
        new Thread(new Runnable() {
            public void run() {
                test5.m1(100);
            }
        }).start();
        System.out.println(test5.getNum());
        try {
            TimeUnit.SECONDS.sleep(3);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println(test5.getNum());
    }

}
